#include<stdio.h>
#include<stdlib.h>

//单向链式结构的栈（链栈）写法：1.判空
//                2.入栈->头插法
//                3.出栈
//                4.获取一个元素

typedef struct Node{
    int data;
    struct Node* next;
}StackNode,*LinkedStack;

LinkedStack InitStack(){
    StackNode *l = (StackNode *)malloc(sizeof(StackNode));
    l->next = NULL;
    return l;
}

void Push(LinkedStack l,int k){
    StackNode *s = (StackNode *)malloc(sizeof(StackNode));
    s->data = k;
    s->next = l->next;
    l->next = s; 
}

int isEmpty(LinkedStack l){
    if(l->next == NULL) return 0;
    return 1;
}

void Pop(LinkedStack l){
    StackNode *p = l->next;
    if(isEmpty(l) == 0) {
        printf("删除失败\n");
        return ;
    }
    l->next = p->next;
    free(p);
    p = NULL;
    return ;
}

int Get(LinkedStack l){
    return isEmpty(l)==1?l->next->data:-1;
}

void Print(LinkedStack l){
    StackNode *p = l->next;
    printf("栈顶到栈帝：\n");
    while(p != NULL){
        printf("%d  ",p->data);
        p = p->next;
    }
    printf("\n");
}

int main(){
    LinkedStack s = InitStack();
    Push(s,1);
    Push(s,2);
    Push(s,3);
    Push(s,5);
    Push(s,6);
    Push(s,7);
    Push(s,8);
    Push(s,4);
    Pop(s);
    printf("栈顶元素：%d\n",Get(s));
    Print(s);


}


